<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

</head>

<body>
    <div class="btn"></div>
</body>
<script src="./js/lib/jquery/jquery-1.12.4.min.js"></script>
<!-- async await -->
<!-- <script>
    let p1 = new Promise((resolve, reject) => {
        $.ajax({
            method: "get",
            url: "~",
            success: (data) => {
                resolve(data)
            },
            error: (err) => {
                reject(err)
            }
        })
    })
    $(".btn").click(async () => {
        let result = await p1;
        console.log(result)
    })
</script> -->
<!-- class类 -->
<!-- <script>
    //原始写法
    function Person(name, age) {
        this.name = name;
        this.age = age;
        jump = function () {
            console.log("我跳起来了")
        }
        set = () => {
            console.log("我坐下了")
        }
    }

    let p1 = new Person("李志华", 50);
    console.log(p1)

    //在原型上添加属性
    console.log(Person.prototype); //一般用这个找原型对象
    Person.prototype.hobby = "写作业";
    console.log(p1.constructor) //找到构造函数
    console.log(p1.constructor.prototype) //回到原型对象
    console.log(p1.__proto__) //找到原型对象
    //但是写在原型对象上的方法一般都是直接在实例化对象上直接调用，因为使用原型对象就是为了给实例化对象添加属性和方法

    //1.我想给实例化对象添加属性=>p1.属性名
    //2.我想给原型对象添加属性=>Person.prototype.属性名，或者p1.__proto__.属性名，或者p1.constructor(回到了构造函数).prototype.属性名    最简单的是第一种
    //3.我想给Person添加属性名，p1.constructor.属性名

</script> -->

<!-- //class类 -->
<script>
    class Person {
        constructor(name, age) {
            this.name = name;
            this.age = age;
            //这个里面不能加方法，只能在外面不用static直接写加在原型对象上
        }

        jump = () => {
            console.log("跳起来了")
        }
        //这个玩意加在了构造函数上

        set = "坐下了";
        //这玩意加在了每一个实例化对象中，等同于在construuctor中加了一个this.set

        static song = "蓝莲花";

        static sing = () => {
            console.log(this.song)
        }

        //static 把属性加在了构造函数上
    }
    var p1 = new Person("李克强", 60);
    console.log(p1)

    //this指向
    // 1. 在全局和全局方法上指向window
    // 2. 严格模式下不指向window， 得到undifined
    // 3. 作为一个对象的方法被调用的时候指向该对象
    // 4. 在构造函数中， 指向新创建的对象
    // 5. 箭头函数中， 没有this指向， 得到外层对象
    // 6. 事件中， 指向触发该事件的对象
    // 7. apply， call， bind可以改变this指向
    // 8. class类中static后， 指向构造函数， 其他位置指向实例化对象

    // call 和apply 区别是call可以有无数个参数， 而apply只有两个参数
</script>

</html>